package Controller;

import java.util.ArrayList;
import java.util.List;

import Beans.*;
import DAO.HibernateProductoDAO;
import DTO.*;
import Model.*;

public class AdministradorProducto {
	private static AdministradorProducto instancia;
	private AdministradorProducto(){
		
	}
	public static AdministradorProducto getInstancia(){
		if(instancia==null)
			instancia=new AdministradorProducto();
		return instancia;
	}
	public ProductoBean fromModelTOBean(Producto producto) {
		ProductoBean productoBean=null;
		if(producto!=null){
			if(producto.getClass().toString().contains("Ingrediente")){
				IngredienteBean productoBean1=new IngredienteBean();
				productoBean1.setId(producto.getId());
				productoBean1.setCategorizacion(producto.getCategorizacion());
				productoBean1.setNombre(producto.getNombre());
				productoBean1.setProovedores(AdministradorProovedor.getInstancia().fromModelTOBean(producto.getProovedores()));
				productoBean1.setFresco(((Ingrediente) producto).isFresco());
				return productoBean1;
			}
			if(producto.getClass().toString().contains("Simple")){
				SimpleBean productoBean1=new SimpleBean();
				productoBean1.setId(producto.getId());
				productoBean1.setCategorizacion(producto.getCategorizacion());
				productoBean1.setNombre(producto.getNombre());
				productoBean1.setProovedores(AdministradorProovedor.getInstancia().fromModelTOBean(producto.getProovedores()));
				return productoBean1;
			}
			if(producto.getClass().toString().contains("Insumo")){
				InsumoBean productoBean1=new InsumoBean();
				productoBean1.setId(producto.getId());
				productoBean1.setCategorizacion(producto.getCategorizacion());
				productoBean1.setNombre(producto.getNombre());
				productoBean1.setProovedores(AdministradorProovedor.getInstancia().fromModelTOBean(producto.getProovedores()));
				return productoBean1;
			}
			if(producto.getClass().toString().contains("Semielaborado")){
				SemielaboradoBean productoBean1=new SemielaboradoBean();
				productoBean1.setId(producto.getId());
				productoBean1.setCategorizacion(producto.getCategorizacion());
				productoBean1.setNombre(producto.getNombre());
				productoBean1.setProovedores(AdministradorProovedor.getInstancia().fromModelTOBean(producto.getProovedores()));
				productoBean1.setFresco(((Semielaborado) producto).isFresco());
				productoBean1.setReceta(AdministradorReceta.getInstancia().fromModelTOBean(((Semielaborado) producto).getReceta()));
				return productoBean1;
			}
		}
		return productoBean;
	}
	
	
	public Producto fromDTOTOModel(ProductoDTO productoDTO) {
		Producto producto=null;
		if(productoDTO!=null){
			if(productoDTO.getClass().toString().contains("Ingrediente")){
				Ingrediente producto1=new Ingrediente();
				producto1.setId(productoDTO.getId());
				producto1.setCategorizacion(productoDTO.getCategorizacion());
				producto1.setNombre(productoDTO.getNombre());
				producto1.setProovedores(AdministradorProovedor.getInstancia().fromDTOTOModel(productoDTO.getProovedores()));
				producto1.setFresco(((IngredienteDTO) productoDTO).isFresco());
				return producto1;
			}
			if(productoDTO.getClass().toString().contains("Simple")){
				Simple producto1=new Simple();
				producto1.setId(productoDTO.getId());
				producto1.setCategorizacion(productoDTO.getCategorizacion());
				producto1.setNombre(productoDTO.getNombre());
				producto1.setProovedores(AdministradorProovedor.getInstancia().fromDTOTOModel(productoDTO.getProovedores()));
				return producto1;
			}
			if(productoDTO.getClass().toString().contains("Insumo")){
				Insumo producto1=new Insumo();
				producto1.setId(productoDTO.getId());
				producto1.setCategorizacion(productoDTO.getCategorizacion());
				producto1.setNombre(productoDTO.getNombre());
				producto1.setProovedores(AdministradorProovedor.getInstancia().fromDTOTOModel(productoDTO.getProovedores()));
				return producto1;
			}
			if(productoDTO.getClass().toString().contains("Semielaborado")){
				Semielaborado producto1=new Semielaborado();
				producto1.setId(productoDTO.getId());
				producto1.setCategorizacion(productoDTO.getCategorizacion());
				producto1.setNombre(productoDTO.getNombre());
				producto1.setProovedores(AdministradorProovedor.getInstancia().fromDTOTOModel(productoDTO.getProovedores()));
				producto1.setFresco(((SemielaboradoDTO) productoDTO).isFresco());
				producto1.setReceta(AdministradorReceta.getInstancia().fromDTOTOModel(((SemielaboradoDTO) productoDTO).getReceta()));
				return producto1;
			}
		}
		return producto;
	}
	
	
	public Producto fromBeanTOModel(ProductoBean productoBean) {
		Producto producto=null;
		if(productoBean!=null){
			if(productoBean.getClass().toString().contains("Ingrediente")){
				Ingrediente producto1=new Ingrediente();
				producto1.setId(productoBean.getId());
				producto1.setCategorizacion(productoBean.getCategorizacion());
				producto1.setNombre(productoBean.getNombre());
				producto1.setProovedores(AdministradorProovedor.getInstancia().fromBeanTOModel(productoBean.getProovedores()));
				producto1.setFresco(((IngredienteBean) productoBean).isFresco());
				return producto1;
			}
			if(productoBean.getClass().toString().contains("Simple")){
				Simple producto1=new Simple();
				producto1.setId(productoBean.getId());
				producto1.setCategorizacion(productoBean.getCategorizacion());
				producto1.setNombre(productoBean.getNombre());
				producto1.setProovedores(AdministradorProovedor.getInstancia().fromBeanTOModel(productoBean.getProovedores()));
				return producto1;
			}
			if(productoBean.getClass().toString().contains("Insumo")){
				Insumo producto1=new Insumo();
				producto1.setId(productoBean.getId());
				producto1.setCategorizacion(productoBean.getCategorizacion());
				producto1.setNombre(productoBean.getNombre());
				producto1.setProovedores(AdministradorProovedor.getInstancia().fromBeanTOModel(productoBean.getProovedores()));
				return producto1;
			}
			if(productoBean.getClass().toString().contains("Semielaborado")){
				Semielaborado producto1=new Semielaborado();
				producto1.setId(productoBean.getId());
				producto1.setCategorizacion(productoBean.getCategorizacion());
				producto1.setNombre(productoBean.getNombre());
				producto1.setProovedores(AdministradorProovedor.getInstancia().fromBeanTOModel(productoBean.getProovedores()));
				producto1.setFresco(((SemielaboradoBean) productoBean).isFresco());
				producto1.setReceta(AdministradorReceta.getInstancia().fromBeanTOModel(((SemielaboradoBean) productoBean).getReceta()));
				return producto1;
			}
		}
		return producto;
	}
	
	public ProductoDTO fromModelTODTO(Producto producto) {
		ProductoDTO productoDTO = null;
		if (producto != null) {
			if (producto.getClass().toString().contains("Ingrediente")) {
				IngredienteDTO productoBean1 = new IngredienteDTO();
				productoBean1.setId(producto.getId());
				productoBean1.setCategorizacion(producto.getCategorizacion());
				productoBean1.setNombre(producto.getNombre());
				productoBean1.setProovedores(AdministradorProovedor.getInstancia().fromModelTODTO(producto.getProovedores()));
				productoBean1.setFresco(((Ingrediente) producto).isFresco());
				return productoBean1;
			}
			if (producto.getClass().toString().contains("Simple")) {
				SimpleDTO productoBean1 = new SimpleDTO();
				productoBean1.setId(producto.getId());
				productoBean1.setCategorizacion(producto.getCategorizacion());
				productoBean1.setNombre(producto.getNombre());
				productoBean1.setProovedores(AdministradorProovedor.getInstancia().fromModelTODTO(producto.getProovedores()));
				return productoBean1;
			}
			if (producto.getClass().toString().contains("Insumo")) {
				InsumoDTO productoBean1 = new InsumoDTO();
				productoBean1.setId(producto.getId());
				productoBean1.setCategorizacion(producto.getCategorizacion());
				productoBean1.setNombre(producto.getNombre());
				productoBean1.setProovedores(AdministradorProovedor.getInstancia().fromModelTODTO(producto.getProovedores()));
				return productoBean1;
			}
			if (producto.getClass().toString().contains("Semielaborado")) {
				SemielaboradoDTO productoBean1 = new SemielaboradoDTO();
				productoBean1.setId(producto.getId());
				productoBean1.setCategorizacion(producto.getCategorizacion());
				productoBean1.setNombre(producto.getNombre());
				productoBean1.setProovedores(AdministradorProovedor.getInstancia().fromModelTODTO(producto.getProovedores()));
				productoBean1.setFresco(((Semielaborado) producto).isFresco());
				productoBean1.setReceta(AdministradorReceta.getInstancia().fromModelTODTO(((Semielaborado) producto).getReceta()));
				return productoBean1;
			}
		}
		return productoDTO;
	}
	
	public void grabarProducto(Producto producto) {
		ProductoBean productob=fromModelTOBean(producto);
		HibernateProductoDAO.getInstancia().grabarProducto(productob);
		
	}
	
	public Ingrediente buscarIngrediente(Ingrediente i) {
		IngredienteBean ib=(IngredienteBean) fromModelTOBean(i);
		ib=HibernateProductoDAO.getInstancia().buscarIngrediente(ib);
		return (Ingrediente) fromBeanTOModel(ib);
	}
	
	public Simple buscarSimple(Simple s) {
		SimpleBean sb=(SimpleBean) fromModelTOBean(s);
		sb=HibernateProductoDAO.getInstancia().buscarSimple(sb);
		return (Simple) fromBeanTOModel(sb);
	}
	
	public Semielaborado buscarSemielaborado(Semielaborado s) {
		SemielaboradoBean sb=(SemielaboradoBean) fromModelTOBean(s);
		sb=HibernateProductoDAO.getInstancia().buscarSemielaborado(sb);
		return (Semielaborado) fromBeanTOModel(sb);
	}
	
	public Insumo buscarInsumo(Insumo s) {
		InsumoBean sb=(InsumoBean) fromModelTOBean(s);
		sb=HibernateProductoDAO.getInstancia().buscarInsumo(sb);
		return (Insumo) fromBeanTOModel(sb);
	}
	public void updateProducto(Producto producto3) {
		ProductoBean productobean=fromModelTOBean(producto3);
		HibernateProductoDAO.getInstancia().update(productobean);
		
	}
	public List<Producto> listarIngredientes() {
		List<Producto> ingredientes = new ArrayList<Producto>();
		List<IngredienteBean> ingredientesBeans = HibernateProductoDAO.getInstancia().listarIngredientes();
		for (IngredienteBean ingredienteBean : ingredientesBeans) {
			 ingredientes.add(fromBeanTOModel(ingredienteBean));
		}
		return ingredientes;
	}
	public List<Producto> listarSimples() {
		List<Producto> simples = new ArrayList<Producto>();
		List<SimpleBean> simpleBeans = HibernateProductoDAO.getInstancia().listarSimples();
		for (SimpleBean simpleBean : simpleBeans) {
			 simples.add(fromBeanTOModel(simpleBean));
		}
		return simples;
	}
	public List<Producto> listarInsumos() {
		List<Producto> insumos = new ArrayList<Producto>();
		List<InsumoBean> insumosBeans = HibernateProductoDAO.getInstancia().listarInsumos();
		for (InsumoBean insumoBean : insumosBeans) {
			 insumos.add(fromBeanTOModel(insumoBean));
		}
		return insumos;
	}
	public List<Producto> listarSemielaborados() {
		List<Producto> semielaborados = new ArrayList<Producto>();
		List<SemielaboradoBean> semielaboradoBeans = HibernateProductoDAO.getInstancia().listarSemielaborados();
		for (SemielaboradoBean semielaboradoBean : semielaboradoBeans) {
			 semielaborados.add(fromBeanTOModel(semielaboradoBean));
		}
		return semielaborados;
	}
}
